/* NicEdit - Micro Inline WYSIWYG
 * Copyright 2007-2008 Brian Kirchoff
 *
 * NicEdit is distributed under the terms of the MIT license
 * For more information visit http://nicedit.com/
 * Do not remove this copyright message
 */
var bkExtend=function(){
    var A=arguments;
    if(A.length==1){
        A=[this,A[0]]
    }
    for(var B in A[1]){
        A[0][B]=A[1][B]
    }
    return A[0]
};

function bkClass(){}
bkClass.prototype.construct=function(){};

bkClass.extend=function(C){
    var A=function(){
        if(arguments[0]!==bkClass){
            return this.construct.apply(this,arguments)
        }
    };

    var B=new this(bkClass);
    bkExtend(B,C);
    A.prototype=B;
    A.extend=this.extend;
    return A
};

var bkElement=bkClass.extend({
    construct:function(B,A){
        if(typeof (B)=="string"){
            B=(A||document).createElement(B)
        }
        B=$BK(B);
        return B
    },
    appendTo:function(A){
        A.appendChild(this);
        return this
    },
    appendBefore:function(A){
        A.parentNode.insertBefore(this,A);
        return this
    },
    addEvent:function(B,A){
        bkLib.addEvent(this,B,A);
        return this
    },
    setContent:function(A){
        this.innerHTML=A;
        return this
    },
    pos:function(){
        var C=curtop=0;
        var B=obj=this;
        if(obj.offsetParent){
            do{
                C+=obj.offsetLeft;
                curtop+=obj.offsetTop
            }while(obj=obj.offsetParent)
        }
        var A=(!window.opera)?parseInt(this.getStyle("border-width")||this.style.border)||0:0;
        return[C+A,curtop+A+this.offsetHeight]
    },
    noSelect:function(){
        bkLib.noSelect(this);
        return this
    },
    parentTag:function(A){
        var B=this;
        do{
            if(B&&B.nodeName&&B.nodeName.toUpperCase()==A){
                return B
            }
            B=B.parentNode
        }while(B);
        return false
    },
    hasClass:function(A){
        return this.className.match(new RegExp("(\\s|^)nicEdit-"+A+"(\\s|$)"))
    },
    addClass:function(A){
        if(!this.hasClass(A)){
            this.className+=" nicEdit-"+A
        }
        return this
    },
    removeClass:function(A){
        if(this.hasClass(A)){
            this.className=this.className.replace(new RegExp("(\\s|^)nicEdit-"+A+"(\\s|$)")," ")
        }
        return this
    },
    setStyle:function(A){
        var B=this.style;
        for(var C in A){
            switch(C){
                case"float":
                    B.cssFloat=B.styleFloat=A[C];
                    break;
                case"opacity":
                    B.opacity=A[C];
                    B.filter="alpha(opacity="+Math.round(A[C]*100)+")";
                    break;
                case"className":
                    this.className=A[C];
                    break;
                default:
                    B[C]=A[C]
            }
        }
        return this
    },
    getStyle:function(A,C){
        var B=(!C)?document.defaultView:C;
        if(this.nodeType==1){
            return(B&&B.getComputedStyle)?B.getComputedStyle(this,null).getPropertyValue(A):this.currentStyle[bkLib.camelize(A)]
        }
    },
    remove:function(){
        this.parentNode.removeChild(this);
        return this
    },
    setAttributes:function(A){
        for(var B in A){
            this[B]=A[B]
        }
        return this
    }
});
var bkLib={
    isMSIE:(navigator.appVersion.indexOf("MSIE")!=-1),
    addEvent:function(C,B,A){
        (C.addEventListener)?C.addEventListener(B,A,false):C.attachEvent("on"+B,A)
    },
    toArray:function(C){
        var B=C.length,A=new Array(B);
        while(B--){
            A[B]=C[B]
        }
        return A
    },
    noSelect:function(B){
        if(B.setAttribute&&B.nodeName.toLowerCase()!="input"&&B.nodeName.toLowerCase()!="textarea"){
            B.setAttribute("unselectable","on")
        }
        for(var A=0;A<B.childNodes.length;A++){
            bkLib.noSelect(B.childNodes[A])
        }
    },
    camelize:function(A){
        return A.replace(/\-(.)/g,function(B,C){
            return C.toUpperCase()
        })
    },
    inArray:function(A,B){
        return(bkLib.search(A,B)!=null)
    },
    search:function(A,C){
        for(var B=0;B<A.length;B++){
            if(A[B]==C){
                return B
            }
        }
        return null
    },
    cancelEvent:function(A){
        A=A||window.event;
        if(A.preventDefault&&A.stopPropagation){
            A.preventDefault();
            A.stopPropagation()
        }
        return false
    },
    domLoad:[],
    domLoaded:function(){
        if(arguments.callee.done){
            return
        }
        arguments.callee.done=true;
        for(i=0;i<bkLib.domLoad.length;i++){
            bkLib.domLoad[i]()
        }
    },
    onDomLoaded:function(A){
        this.domLoad.push(A);
        if(document.addEventListener){
            document.addEventListener("DOMContentLoaded",bkLib.domLoaded,null)
        }else{
            if(bkLib.isMSIE){
                document.write("<style>.nicEdit-main p { margin: 0; }</style><script id=__ie_onload defer "+((location.protocol=="https:")?"src='javascript:void(0)'":"src=//0")+"><\/script>");
                $BK("__ie_onload").onreadystatechange=function(){
                    if(this.readyState=="complete"){
                        bkLib.domLoaded()
                    }
                }
            }
        }
        window.onload=bkLib.domLoaded
    }
};

function $BK(A){
    if(typeof (A)=="string"){
        A=document.getElementById(A)
    }
    return(A&&!A.appendTo)?bkExtend(A,bkElement.prototype):A
}
var bkEvent={
    addEvent:function(A,B){
        if(B){
            this.eventList=this.eventList||{};

            this.eventList[A]=this.eventList[A]||[];
            this.eventList[A].push(B)
        }
        return this
    },
    fireEvent:function(){
        var A=bkLib.toArray(arguments),C=A.shift();
        if(this.eventList&&this.eventList[C]){
            for(var B=0;B<this.eventList[C].length;B++){
                this.eventList[C][B].apply(this,A)
            }
        }
    }
};

function __(A){
    return A
}
Function.prototype.closure=function(){
    var A=this,B=bkLib.toArray(arguments),C=B.shift();
    return function(){
        if(typeof (bkLib)!="undefined"){
            return A.apply(C,B.concat(bkLib.toArray(arguments)))
        }
    }
};

Function.prototype.closureListener=function(){
    var A=this,C=bkLib.toArray(arguments),B=C.shift();
    return function(E){
        E=E||window.event;
        if(E.target){
            var D=E.target
        }else{
            var D=E.srcElement
        }
        return A.apply(B,[E,D].concat(C))
    }
};



var nicEditorConfig = bkClass.extend({
    buttons : {
        'bold' : {
            name : __('Click to Bold'),
            command : 'Bold',
            tags : ['B','STRONG'],
            css : {
                'font-weight' : 'bold'
            },
            key : 'b'
        },
        'italic' : {
            name : __('Click to Italic'),
            command : 'Italic',
            tags : ['EM','I'],
            css : {
                'font-style' : 'italic'
            },
            key : 'i'
        },
        'underline' : {
            name : __('Click to Underline'),
            command : 'Underline',
            tags : ['U'],
            css : {
                'text-decoration' : 'underline'
            },
            key : 'u'
        },
        'left' : {
            name : __('Left Align'),
            command : 'justifyleft',
            noActive : true
        },
        'center' : {
            name : __('Center Align'),
            command : 'justifycenter',
            noActive : true
        },
        'right' : {
            name : __('Right Align'),
            command : 'justifyright',
            noActive : true
        },
        'justify' : {
            name : __('Justify Align'),
            command : 'justifyfull',
            noActive : true
        },
        'ol' : {
            name : __('Insert Ordered List'),
            command : 'insertorderedlist',
            tags : ['OL']
        },
        'ul' : 	{
            name : __('Insert Unordered List'),
            command : 'insertunorderedlist',
            tags : ['UL']
        },
        'subscript' : {
            name : __('Click to Subscript'),
            command : 'subscript',
            tags : ['SUB']
        },
        'superscript' : {
            name : __('Click to Superscript'),
            command : 'superscript',
            tags : ['SUP']
        },
        'strikethrough' : {
            name : __('Click to Strike Through'),
            command : 'strikeThrough',
            css : {
                'text-decoration' : 'line-through'
            }
        },
        'removeformat' : {
            name : __('Remove Formatting'),
            command : 'removeformat',
            noActive : true
        },
        'indent' : {
            name : __('Indent Text'),
            command : 'indent',
            noActive : true
        },
        'outdent' : {
            name : __('Remove Indent'),
            command : 'outdent',
            noActive : true
        },
        'hr' : {
            name : __('Horizontal Rule'),
            command : 'insertHorizontalRule',
            noActive : true
        }
    },
    iconsPath : st_url + '/backend/js/nicEdit/nicEditorIcons.gif',
    buttonList : ['save','bold','italic','underline','left','center','right','justify','ol','ul','fontSize','fontFamily','fontFormat','indent','outdent','image','upload','link','unlink','forecolor','bgcolor','xhtml'],
    iconList : {
        "xhtml":1,
        "bgcolor":2,
        "forecolor":3,
        "bold":4,
        "center":5,
        "hr":6,
        "indent":7,
        "italic":8,
        "justify":9,
        "left":10,
        "ol":11,
        "outdent":12,
        "removeformat":13,
        "right":14,
        "save":25,
        "strikethrough":16,
        "subscript":17,
        "superscript":18,
        "ul":19,
        "underline":20,
        "image":21,
        "link":22,
        "unlink":23,
        "close":24,
        "arrow":26,
        "upload":27
    }
	
});
;
var nicEditors={
    nicPlugins:[],
    editors:[],
    registerPlugin:function(B,A){
        this.nicPlugins.push({
            p:B,
            o:A
        })
    },
    allTextAreas:function(C){

        if(typeof(C) == 'undefined')
        {
            C = {fullPanel: true};
        }

        var A=document.getElementsByTagName("textarea");
        for(var B=0;B<A.length;B++){
            nicEditors.editors.push(new nicEditor(C).panelInstance(A[B]))
        }
        return nicEditors.editors
    },
    findEditor:function(C){
        var B=nicEditors.editors;
        for(var A=0;A<B.length;A++){
            if(B[A].instanceById(C)){
                return B[A].instanceById(C)
            }
        }
    }
};

var nicEditor=bkClass.extend({
    construct:function(C){
        this.options=new nicEditorConfig();
        bkExtend(this.options,C);
        this.nicInstances=new Array();
        this.loadedPlugins=new Array();
        var A=nicEditors.nicPlugins;
        for(var B=0;B<A.length;B++){
            this.loadedPlugins.push(new A[B].p(this,A[B].o))
        }
        nicEditors.editors.push(this);
        bkLib.addEvent(document.body,"mousedown",this.selectCheck.closureListener(this))
    },
    panelInstance:function(B,C){
        B=this.checkReplace($BK(B));
        var A=new bkElement("DIV").setStyle({
            width:(parseInt(B.getStyle("width"))||B.clientWidth)+"px"
        }).appendBefore(B);
        this.setPanel(A);
        return this.addInstance(B,C)
    },
    checkReplace:function(B){
        var A=nicEditors.findEditor(B);
        if(A){
            A.removeInstance(B);
            A.removePanel()
        }
        return B
    },
    addInstance:function(B,C){
        B=this.checkReplace($BK(B));
        //if(B.contentEditable||!!window.opera){
        if ((B.contentEditable || !!window.opera) && navigator.userAgent.indexOf("Firefox/3") == -1) {
            var A=new nicEditorInstance(B,C,this)
        }else{
            var A=new nicEditorIFrameInstance(B,C,this)
        }
        this.nicInstances.push(A);
        return this
    },
    removeInstance:function(C){
        C=$BK(C);
        var B=this.nicInstances;
        for(var A=0;A<B.length;A++){
            if(B[A].e==C){
                B[A].remove();
                this.nicInstances.splice(A,1)
            }
        }
    },
    removePanel:function(A){
        if(this.nicPanel){
            this.nicPanel.remove();
            this.nicPanel=null
        }
    },
    instanceById:function(C){
        C=$BK(C);
        var B=this.nicInstances;
        for(var A=0;A<B.length;A++){
            if(B[A].e==C){
                return B[A]
            }
        }
    },
    setPanel:function(A){
        this.nicPanel=new nicEditorPanel($BK(A),this.options,this);
        this.fireEvent("panel",this.nicPanel);
        return this
    },
    nicCommand:function(B,A){
        if(this.selectedInstance){
            this.selectedInstance.nicCommand(B,A)
        }
    },
    getIcon:function(D,A){
        var C=this.options.iconList[D];
        var B=(A.iconFiles)?A.iconFiles[D]:"";
        return{
            backgroundImage:"url('"+((C)?this.options.iconsPath:B)+"')",
            backgroundPosition:((C)?((C-1)*-18):0)+"px 0px"
        }
    },
    selectCheck:function(C,A){
        var B=false;
        do{
            if(A.className&&A.className.indexOf("nicEdit")!=-1){
                return false
            }
        }while(A=A.parentNode);
        this.fireEvent("blur",this.selectedInstance,A);
        this.lastSelectedInstance=this.selectedInstance;
        this.selectedInstance=null;
        return false
    }
});
nicEditor=nicEditor.extend(bkEvent);
var nicEditorInstance=bkClass.extend({
    isSelected:false,
    construct:function(G,D,C){
        this.ne=C;
        this.elm=this.e=G;
        this.options=D||{};

        newX=parseInt(G.getStyle("width"))||G.clientWidth;
        newY=parseInt(G.getStyle("height"))||G.clientHeight;
        this.initialHeight=newY-8;
        var H=(G.nodeName.toLowerCase()=="textarea");
        if(H||this.options.hasPanel){
            var B=(bkLib.isMSIE&&!((typeof document.body.style.maxHeight!="undefined")&&document.compatMode=="CSS1Compat"));
            var E={
                width:newX+"px",
                border:"1px solid #B5B8BB",
                borderTop:0,
                overflowY:"auto",
                overflowX:"hidden",
                background:"#E7EDEF"
            };

            E[(B)?"height":"maxHeight"]=(this.ne.options.maxHeight)?this.ne.options.maxHeight+"px":null;
            this.editorContain=new bkElement("DIV").setStyle(E).appendBefore(G);
            var A=new bkElement("DIV").setStyle({
                width:(newX-8)+"px",
                margin:"4px",
                minHeight:newY+"px"
            }).addClass("main").appendTo(this.editorContain);
            G.setStyle({
                display:"none"
            });
            A.innerHTML=G.innerHTML;
            if(H){
                A.setContent(G.value);
                this.copyElm=G;
                var F=G.parentTag("FORM");
                if(F){
                    bkLib.addEvent(F,"submit",this.saveContent.closure(this))
                }
            }
            A.setStyle((B)?{
                height:newY+"px"
            }:{
                overflow:"hidden"
            });
            this.elm=A
        }
        this.ne.addEvent("blur",this.blur.closure(this));
        this.init();
        this.blur()
    },
    init:function(){
        this.elm.setAttribute("contentEditable","true");
        if(this.getContent()==""){
            this.setContent("<br />")
        }
        this.instanceDoc=document.defaultView;
        this.elm.addEvent("mousedown",this.selected.closureListener(this)).addEvent("keypress",this.keyDown.closureListener(this)).addEvent("focus",this.selected.closure(this)).addEvent("blur",this.blur.closure(this)).addEvent("keyup",this.selected.closure(this));
        this.ne.fireEvent("add",this)
    },
    remove:function(){
        this.saveContent();
        if(this.copyElm||this.options.hasPanel){
            this.editorContain.remove();
            this.e.setStyle({
                display:"block"
            });
            this.ne.removePanel()
        }
        this.disable();
        this.ne.fireEvent("remove",this)
    },
    disable:function(){
        this.elm.setAttribute("contentEditable","false")
    },
    getSel:function(){
        return(window.getSelection)?window.getSelection():document.selection
    },
    getRng:function(){
        var A=this.getSel();
        if(!A){
            return null
        }
        return(A.rangeCount>0)?A.getRangeAt(0):A.createRange()
    },
    selRng:function(A,B){
        if(window.getSelection){
            B.removeAllRanges();
            B.addRange(A)
        }else{
            A.select()
        }
    },
    selElm:function(){
        var C=this.getRng();
        if(C.startContainer){
            var D=C.startContainer;
            if(C.cloneContents().childNodes.length==1){
                for(var B=0;B<D.childNodes.length;B++){
                    var A=D.childNodes[B].ownerDocument.createRange();
                    A.selectNode(D.childNodes[B]);
                    if(C.compareBoundaryPoints(Range.START_TO_START,A)!=1&&C.compareBoundaryPoints(Range.END_TO_END,A)!=-1){
                        return $BK(D.childNodes[B])
                    }
                }
            }
            return $BK(D)
        }else{
            return $BK((this.getSel().type=="Control")?C.item(0):C.parentElement())
        }
    },
    saveRng:function(){
        this.savedRange=this.getRng();
        this.savedSel=this.getSel()
    },
    restoreRng:function(){
        if(this.savedRange){
            this.selRng(this.savedRange,this.savedSel)
        }
    },
    keyDown:function(B,A){
        if(B.ctrlKey){
            this.ne.fireEvent("key",this,B)
        }
    },
    selected:function(C,A){
        if(!A){
            A=this.selElm()
        }
        if(!C.ctrlKey){
            var B=this.ne.selectedInstance;
            if(B!=this){
                if(B){
                    this.ne.fireEvent("blur",B,A)
                }
                this.ne.selectedInstance=this;
                this.ne.fireEvent("focus",B,A)
            }
            this.ne.fireEvent("selected",B,A);
            this.isFocused=true;
            this.elm.addClass("selected")
        }
        return false
    },
    blur:function(){
        this.isFocused=false;
        this.elm.removeClass("selected")
    },
    saveContent:function(){
        if(this.copyElm||this.options.hasPanel){
            this.ne.fireEvent("save",this);
            (this.copyElm)?this.copyElm.value=this.getContent():this.e.innerHTML=this.getContent()
        }
    },
    getElm:function(){
        return this.elm
    },
    getContent:function(){
        this.content=this.getElm().innerHTML;
        this.ne.fireEvent("get",this);
        return this.content
    },
    setContent:function(A){
        this.content=A;
        this.ne.fireEvent("set",this);
        this.elm.innerHTML=this.content
    },
    nicCommand:function(B,A){
        document.execCommand(B,false,A)
    }
});
var nicEditorIFrameInstance=nicEditorInstance.extend({
    savedStyles:[],
    init:function(){
        var B=this.elm.innerHTML.replace(/^\s+|\s+$/g,"");
        this.elm.innerHTML="";
        (!B)?B="<br />":B;
        this.initialContent=B;
        this.elmFrame=new bkElement("iframe").setAttributes({
            src:"javascript:;",
            frameBorder:0,
            allowTransparency:"true",
            scrolling:"no"
        }).setStyle({
            height:"100px",
            width:"100%"
        }).addClass("frame").appendTo(this.elm);
        if(this.copyElm){
            this.elmFrame.setStyle({
                width:(this.elm.offsetWidth-4)+"px"
            })
        }
        var A=["font-size","font-family","font-weight","color"];
        for(itm in A){
            this.savedStyles[bkLib.camelize(itm)]=this.elm.getStyle(itm)
        }
        setTimeout(this.initFrame.closure(this),50)
    },
    disable:function(){
        this.elm.innerHTML=this.getContent()
    },
    initFrame:function(){
        var B=$BK(this.elmFrame.contentWindow.document);
        B.designMode="on";
        B.open();
        var A=this.ne.options.externalCSS;
        B.write("<html><head>"+((A)?'<link href="'+A+'" rel="stylesheet" type="text/css" />':"")+'</head><body id="nicEditContent" style="margin: 0 !important; background-color: transparent !important;">'+this.initialContent+"</body></html>");
        B.close();
        this.frameDoc=B;
        this.frameWin=$BK(this.elmFrame.contentWindow);
        this.frameContent=$BK(this.frameWin.document.body).setStyle(this.savedStyles);
        this.instanceDoc=this.frameWin.document.defaultView;
        this.heightUpdate();
        this.frameDoc.addEvent("mousedown",this.selected.closureListener(this)).addEvent("keyup",this.heightUpdate.closureListener(this)).addEvent("keydown",this.keyDown.closureListener(this)).addEvent("keyup",this.selected.closure(this));
        this.ne.fireEvent("add",this)
    },
    getElm:function(){
        return this.frameContent
    },
    setContent:function(A){
        this.content=A;
        this.ne.fireEvent("set",this);
        this.frameContent.innerHTML=this.content;
        this.heightUpdate()
    },
    getSel:function(){
        return(this.frameWin)?this.frameWin.getSelection():this.frameDoc.selection
    },
    heightUpdate:function(){
        this.elmFrame.style.height=Math.max(this.frameContent.offsetHeight,this.initialHeight)+"px"
    },
    nicCommand:function(B,A){
        this.frameDoc.execCommand(B,false,A);
        setTimeout(this.heightUpdate.closure(this),100)
    }
});
var nicEditorPanel=bkClass.extend({
    construct:function(E,B,A){
        this.elm=E;
        this.options=B;
        this.ne=A;
        this.panelButtons=new Array();
        this.buttonList=bkExtend([],this.ne.options.buttonList);
        this.panelContain=new bkElement("DIV").setStyle({
            overflow:"hidden",
            width:"100%",
            border:"1px solid #cccccc",
            backgroundColor:"#efefef"
        }).addClass("panelContain");
        this.panelElm=new bkElement("DIV").setStyle({
            margin:"2px",
            marginTop:"0px",
            zoom:1,
            overflow:"hidden"
        }).addClass("panel").appendTo(this.panelContain);
        this.panelContain.appendTo(E);
        var C=this.ne.options;
        var D=C.buttons;
        for(button in D){
            this.addButton(button,C,true)
        }
        this.reorder();
        E.noSelect()
    },
    addButton:function(buttonName,options,noOrder){
        var button=options.buttons[buttonName];
        var type=(button.type)?eval("(typeof("+button.type+') == "undefined") ? null : '+button.type+";"):nicEditorButton;
        var hasButton=bkLib.inArray(this.buttonList,buttonName);
        if(type&&(hasButton||this.ne.options.fullPanel)){
            this.panelButtons.push(new type(this.panelElm,buttonName,options,this.ne));
            if(!hasButton){
                this.buttonList.push(buttonName)
            }
        }
    },
    findButton:function(B){
        for(var A=0;A<this.panelButtons.length;A++){
            if(this.panelButtons[A].name==B){
                return this.panelButtons[A]
            }
        }
    },
    reorder:function(){
        var C=this.buttonList;
        for(var B=0;B<C.length;B++){
            var A=this.findButton(C[B]);
            if(A){
                this.panelElm.appendChild(A.margin)
            }
        }
    },
    remove:function(){
        this.elm.remove()
    }
});
var nicEditorButton=bkClass.extend({
    construct:function(D,A,C,B){
        this.options=C.buttons[A];
        this.name=A;
        this.ne=B;
        this.elm=D;
        this.margin=new bkElement("DIV").setStyle({
            "float":"left",
            marginTop:"2px"
        }).appendTo(D);
        this.contain=new bkElement("DIV").setStyle({
            width:"20px",
            height:"20px"
        }).addClass("buttonContain").appendTo(this.margin);
        this.border=new bkElement("DIV").setStyle({
            backgroundColor:"#efefef",
            border:"1px solid #efefef"
        }).appendTo(this.contain);
        this.button=new bkElement("DIV").setStyle({
            width:"18px",
            height:"18px",
            overflow:"hidden",
            zoom:1,
            cursor:"pointer"
        }).addClass("button").setStyle(this.ne.getIcon(A,C)).appendTo(this.border);
        this.button.addEvent("mouseover",this.hoverOn.closure(this)).addEvent("mouseout",this.hoverOff.closure(this)).addEvent("mousedown",this.mouseClick.closure(this)).noSelect();
        if(!window.opera){
            this.button.onmousedown=this.button.onclick=bkLib.cancelEvent
        }
        B.addEvent("selected",this.enable.closure(this)).addEvent("blur",this.disable.closure(this)).addEvent("key",this.key.closure(this));
        this.disable();
        this.init()
    },
    init:function(){},
    hide:function(){
        this.contain.setStyle({
            display:"none"
        })
    },
    updateState:function(){
        if(this.isDisabled){
            this.setBg()
        }else{
            if(this.isHover){
                this.setBg("hover")
            }else{
                if(this.isActive){
                    this.setBg("active")
                }else{
                    this.setBg()
                }
            }
        }
    },
    setBg:function(A){
        switch(A){
            case"hover":
                var B={
                    border:"1px solid #666",
                    backgroundColor:"#ddd"
                };

                break;
            case"active":
                var B={
                    border:"1px solid #666",
                    backgroundColor:"#ccc"
                };

                break;
            default:
                var B={
                    border:"1px solid #efefef",
                    backgroundColor:"#efefef"
                }
        }
        this.border.setStyle(B).addClass("button-"+A)
    },
    checkNodes:function(A){
        var B=A;
        do{
            if(this.options.tags&&bkLib.inArray(this.options.tags,B.nodeName)){
                this.activate();
                return true
            }
        }while(B=B.parentNode&&B.className!="nicEdit");
        B=$BK(A);
        while(B.nodeType==3){
            B=$BK(B.parentNode)
        }
        if(this.options.css){
            for(itm in this.options.css){
                if(B.getStyle(itm,this.ne.selectedInstance.instanceDoc)==this.options.css[itm]){
                    this.activate();
                    return true
                }
            }
        }
        this.deactivate();
        return false
    },
    activate:function(){
        if(!this.isDisabled){
            this.isActive=true;
            this.updateState();
            this.ne.fireEvent("buttonActivate",this)
        }
    },
    deactivate:function(){
        this.isActive=false;
        this.updateState();
        if(!this.isDisabled){
            this.ne.fireEvent("buttonDeactivate",this)
        }
    },
    enable:function(A,B){
        this.isDisabled=false;
        this.contain.setStyle({
            opacity:1
        }).addClass("buttonEnabled");
        this.updateState();
        this.checkNodes(B)
    },
    disable:function(A,B){
        this.isDisabled=true;
        this.contain.setStyle({
            opacity:0.6
        }).removeClass("buttonEnabled");
        this.updateState()
    },
    toggleActive:function(){
        (this.isActive)?this.deactivate():this.activate()
    },
    hoverOn:function(){
        if(!this.isDisabled){
            this.isHover=true;
            this.updateState();
            this.ne.fireEvent("buttonOver",this)
        }
    },
    hoverOff:function(){
        this.isHover=false;
        this.updateState();
        this.ne.fireEvent("buttonOut",this)
    },
    mouseClick:function(){
        if(this.options.command){
            this.ne.nicCommand(this.options.command,this.options.commandArgs);
            if(!this.options.noActive){
                this.toggleActive()
            }
        }
        this.ne.fireEvent("buttonClick",this)
    },
    key:function(A,B){
        if(this.options.key&&B.ctrlKey&&String.fromCharCode(B.keyCode||B.charCode).toLowerCase()==this.options.key){
            this.mouseClick();
            if(B.preventDefault){
                B.preventDefault()
            }
        }
    }
});
var nicPlugin=bkClass.extend({
    construct:function(B,A){
        this.options=A;
        this.ne=B;
        this.ne.addEvent("panel",this.loadPanel.closure(this));
        this.init()
    },
    loadPanel:function(C){
        var B=this.options.buttons;
        for(var A in B){
            C.addButton(A,this.options)
        }
        C.reorder()
    },
    init:function(){}
});


var nicPaneOptions = { };

var nicEditorPane=bkClass.extend({
    construct:function(D,C,B,A){
        this.ne=C;
        this.elm=D;
        this.pos=D.pos();
        this.contain=new bkElement("div").setStyle({
            zIndex:"99999",
            overflow:"hidden",
            position:"absolute",
            left:this.pos[0]+"px",
            top:this.pos[1]+"px"
        });
        this.pane=new bkElement("div").setStyle({
            fontSize:"12px",
            border:"1px solid #ccc",
            overflow:"hidden",
            padding:"4px",
            textAlign:"left",
            backgroundColor:"#ffffc9"
        }).addClass("pane").setStyle(B).appendTo(this.contain);
        if(A&&!A.options.noClose){
            this.close=new bkElement("div").setStyle({
                "float":"right",
                height:"16px",
                width:"16px",
                cursor:"pointer"
            }).setStyle(this.ne.getIcon("close",nicPaneOptions)).addEvent("mousedown",A.removePane.closure(this)).appendTo(this.pane)
        }
        this.contain.noSelect().appendTo(document.body);
        this.position();
        this.init()
    },
    init:function(){},
    position:function(){
        if(this.ne.nicPanel){
            var B=this.ne.nicPanel.elm;
            var A=B.pos();
            var C=A[0]+parseInt(B.getStyle("width"))-(parseInt(this.pane.getStyle("width"))+8);
            if(C<this.pos[0]){
                this.contain.setStyle({
                    left:C+"px"
                })
            }
        }
    },
    toggle:function(){
        this.isVisible=!this.isVisible;
        this.contain.setStyle({
            display:((this.isVisible)?"block":"none")
        })
    },
    remove:function(){
        if(this.contain){
            this.contain.remove();
            this.contain=null
        }
    },
    append:function(A){
        A.appendTo(this.pane)
    },
    setContent:function(A){
        this.pane.setContent(A)
    }
});

var nicEditorAdvancedButton=nicEditorButton.extend({
    init:function(){
        this.ne.addEvent("selected",this.removePane.closure(this)).addEvent("blur",this.removePane.closure(this))
    },
    mouseClick:function(){
        if(!this.isDisabled){
            if(this.pane&&this.pane.pane){
                this.removePane()
            }else{
                this.pane=new nicEditorPane(this.contain,this.ne,{
                    width:(this.width||"270px"),
                    backgroundColor:"#fff"
                },this);
                this.addPane();
                this.ne.selectedInstance.saveRng()
            }
        }
    },
    addForm:function(C,G){
        this.form=new bkElement("form").addEvent("submit",this.submit.closureListener(this));
        this.pane.append(this.form);
        this.inputs={};

        for(itm in C){
            var D=C[itm];
            var F="";
            if(G){
                F=G.getAttribute(itm)
            }
            if(!F){
                F=D.value||""
            }
            var A=C[itm].type;
            if(A=="title"){
                new bkElement("div").setContent(D.txt).setStyle({
                    fontSize:"14px",
                    fontWeight:"bold",
                    padding:"0px",
                    margin:"2px 0"
                }).appendTo(this.form)
            }else{
                var B=new bkElement("div").setStyle({
                    overflow:"hidden",
                    clear:"both"
                }).appendTo(this.form);
                if(D.txt){
                    new bkElement("label").setAttributes({
                        "for":itm
                    }).setContent(D.txt).setStyle({
                        margin:"2px 4px",
                        fontSize:"13px",
                        width:"50px",
                        lineHeight:"20px",
                        textAlign:"right",
                        "float":"left"
                    }).appendTo(B)
                }
                switch(A){
                    case"text":
                        this.inputs[itm]=new bkElement("input").setAttributes({
                            id:itm,
                            value:F,
                            type:"text"
                        }).setStyle({
                            margin:"2px 0",
                            fontSize:"13px",
                            "float":"left",
                            height:"20px",
                            border:"1px solid #ccc",
                            overflow:"hidden"
                        }).setStyle(D.style).appendTo(B);
                        break;
                    case"select":
                        this.inputs[itm]=new bkElement("select").setAttributes({
                            id:itm
                        }).setStyle({
                            border:"1px solid #ccc",
                            "float":"left",
                            margin:"2px 0"
                        }).appendTo(B);
                        for(opt in D.options){
                            var E=new bkElement("option").setAttributes({
                                value:opt,
                                selected:(opt==F)?"selected":""
                            }).setContent(D.options[opt]).appendTo(this.inputs[itm])
                        }
                        break;
                    case"content":
                        this.inputs[itm]=new bkElement("textarea").setAttributes({
                            id:itm
                        }).setStyle({
                            border:"1px solid #ccc",
                            "float":"left"
                        }).setStyle(D.style).appendTo(B);
                        this.inputs[itm].value=F
                }
            }
        }
        new bkElement("input").setAttributes({
            type:"submit"
        }).setStyle({
            backgroundColor:"#efefef",
            border:"1px solid #ccc",
            margin:"3px 0",
            "float":"left",
            clear:"both"
        }).appendTo(this.form);
        this.form.onsubmit=bkLib.cancelEvent
    },
    submit:function(){},
    findElm:function(B,A,E){
        var D=this.ne.selectedInstance.getElm().getElementsByTagName(B);
        for(var C=0;C<D.length;C++){
            if(D[C].getAttribute(A)==E){
                return $BK(D[C])
            }
        }
    },
    removePane:function(){
        if(this.pane){
            this.pane.remove();
            this.pane=null;
            this.ne.selectedInstance.restoreRng()
        }
    }
});

var nicButtonTips=bkClass.extend({
    construct:function(A){
        this.ne=A;
        A.addEvent("buttonOver",this.show.closure(this)).addEvent("buttonOut",this.hide.closure(this))
    },
    show:function(A){
        this.timer=setTimeout(this.create.closure(this,A),400)
    },
    create:function(A){
        this.timer=null;
        if(!this.pane){
            this.pane=new nicEditorPane(A.button,this.ne,{
                fontSize:"12px",
                marginTop:"5px"
            });
            this.pane.setContent(A.options.name)
        }
    },
    hide:function(A){
        if(this.timer){
            clearTimeout(this.timer)
        }
        if(this.pane){
            this.pane=this.pane.remove()
        }
    }
});
nicEditors.registerPlugin(nicButtonTips);


var nicSelectOptions = {
    buttons : {
        'fontSize' : {
            name : __('Select Font Size'),
            type : 'nicEditorFontSizeSelect',
            command : 'fontsize'
        },
        'fontFamily' : {
            name : __('Select Font Family'),
            type : 'nicEditorFontFamilySelect',
            command : 'fontname'
        },
        'fontFormat' : {
            name : __('Select Font Format'),
            type : 'nicEditorFontFormatSelect',
            command : 'formatBlock'
        }
    }
};

var nicEditorSelect=bkClass.extend({
    construct:function(D,A,C,B){
        this.options=C.buttons[A];
        this.elm=D;
        this.ne=B;
        this.name=A;
        this.selOptions=new Array();
        this.margin=new bkElement("div").setStyle({
            "float":"left",
            margin:"2px 1px 0 1px"
        }).appendTo(this.elm);
        this.contain=new bkElement("div").setStyle({
            width:"90px",
            height:"20px",
            cursor:"pointer",
            overflow:"hidden"
        }).addClass("selectContain").addEvent("click",this.toggle.closure(this)).appendTo(this.margin);
        this.items=new bkElement("div").setStyle({
            overflow:"hidden",
            zoom:1,
            border:"1px solid #ccc",
            paddingLeft:"3px",
            backgroundColor:"#fff"
        }).appendTo(this.contain);
        this.control=new bkElement("div").setStyle({
            overflow:"hidden",
            "float":"right",
            height:"18px",
            width:"16px"
        }).addClass("selectControl").setStyle(this.ne.getIcon("arrow",C)).appendTo(this.items);
        this.txt=new bkElement("div").setStyle({
            overflow:"hidden",
            "float":"left",
            width:"66px",
            height:"14px",
            marginTop:"1px",
            fontFamily:"sans-serif",
            textAlign:"center",
            fontSize:"12px"
        }).addClass("selectTxt").appendTo(this.items);
        if(!window.opera){
            this.contain.onmousedown=this.control.onmousedown=this.txt.onmousedown=bkLib.cancelEvent
        }
        this.margin.noSelect();
        this.ne.addEvent("selected",this.enable.closure(this)).addEvent("blur",this.disable.closure(this));
        this.disable();
        this.init()
    },
    disable:function(){
        this.isDisabled=true;
        this.close();
        this.contain.setStyle({
            opacity:0.6
        })
    },
    enable:function(A){
        this.isDisabled=false;
        this.close();
        this.contain.setStyle({
            opacity:1
        })
    },
    setDisplay:function(A){
        this.txt.setContent(A)
    },
    toggle:function(){
        if(!this.isDisabled){
            (this.pane)?this.close():this.open()
        }
    },
    open:function(){
        this.pane=new nicEditorPane(this.items,this.ne,{
            width:"88px",
            padding:"0px",
            borderTop:0,
            borderLeft:"1px solid #ccc",
            borderRight:"1px solid #ccc",
            borderBottom:"0px",
            backgroundColor:"#fff"
        });
        for(var C=0;C<this.selOptions.length;C++){
            var B=this.selOptions[C];
            var A=new bkElement("div").setStyle({
                overflow:"hidden",
                borderBottom:"1px solid #ccc",
                width:"88px",
                textAlign:"left",
                overflow:"hidden",
                cursor:"pointer"
            });
            var D=new bkElement("div").setStyle({
                padding:"0px 4px"
            }).setContent(B[1]).appendTo(A).noSelect();
            D.addEvent("click",this.update.closure(this,B[0])).addEvent("mouseover",this.over.closure(this,D)).addEvent("mouseout",this.out.closure(this,D)).setAttributes("id",B[0]);
            this.pane.append(A);
            if(!window.opera){
                D.onmousedown=bkLib.cancelEvent
            }
        }
    },
    close:function(){
        if(this.pane){
            this.pane=this.pane.remove()
        }
    },
    over:function(A){
        A.setStyle({
            backgroundColor:"#ccc"
        })
    },
    out:function(A){
        A.setStyle({
            backgroundColor:"#fff"
        })
    },
    add:function(B,A){
        this.selOptions.push(new Array(B,A))
    },
    update:function(A){
        this.ne.nicCommand(this.options.command,A);
        this.close()
    }
});
var nicEditorFontSizeSelect=nicEditorSelect.extend({
    sel:{
        1:"1&nbsp;(8pt)",
        2:"2&nbsp;(10pt)",
        3:"3&nbsp;(12pt)",
        4:"4&nbsp;(14pt)",
        5:"5&nbsp;(18pt)",
        6:"6&nbsp;(24pt)"
    },
    init:function(){
        this.setDisplay("Font&nbsp;Size...");
        for(itm in this.sel){
            this.add(itm,'<font size="'+itm+'">'+this.sel[itm]+"</font>")
        }
    }
});
var nicEditorFontFamilySelect=nicEditorSelect.extend({
    sel:{
        arial:"Arial",
        "comic sans ms":"Comic Sans",
        "courier new":"Courier New",
        georgia:"Georgia",
        helvetica:"Helvetica",
        impact:"Impact",
        "times new roman":"Times",
        "trebuchet ms":"Trebuchet",
        verdana:"Verdana"
    },
    init:function(){
        this.setDisplay("Font&nbsp;Family...");
        for(itm in this.sel){
            this.add(itm,'<font face="'+itm+'">'+this.sel[itm]+"</font>")
        }
    }
});
var nicEditorFontFormatSelect=nicEditorSelect.extend({
    sel:{
        p:"Paragraph",
        pre:"Pre",
        h6:"Heading&nbsp;6",
        h5:"Heading&nbsp;5",
        h4:"Heading&nbsp;4",
        h3:"Heading&nbsp;3",
        h2:"Heading&nbsp;2",
        h1:"Heading&nbsp;1"
    },
    init:function(){
        this.setDisplay("Font&nbsp;Format...");
        for(itm in this.sel){
            var A=itm.toUpperCase();
            this.add("<"+A+">","<"+itm+' style="padding: 0px; margin: 0px;">'+this.sel[itm]+"</"+A+">")
        }
    }
});
nicEditors.registerPlugin(nicPlugin,nicSelectOptions);


var nicLinkOptions = {
    buttons : {
        'link' : {
            name : 'Add Link',
            type : 'nicLinkButton',
            tags : ['A']
        },
        'unlink' : {
            name : 'Remove Link',
            command : 'unlink',
            noActive : true
        }
    }
};

var nicLinkButton=nicEditorAdvancedButton.extend({
    addPane:function(){
        this.ln=this.ne.selectedInstance.selElm().parentTag("A");
        this.addForm({
            "":{
                type:"title",
                txt:"Add/Edit Link"
            },
            href:{
                type:"text",
                txt:"URL",
                value:"http://",
                style:{
                    width:"150px"
                }
            },
            title:{
                type:"text",
                txt:"Title"
            },
            target:{
                type:"select",
                txt:"Open In",
                options:{
                    "":"Current Window",
                    _blank:"New Window"
                },
                style:{
                    width:"100px"
                }
            }
        },this.ln)
    },
    submit:function(C){
        var A=this.inputs.href.value;
        if(A=="http://"||A==""){
            alert("You must enter a URL to Create a Link");
            return false
        }
        this.removePane();
        if(!this.ln){
            var B="javascript:nicTemp();";
            this.ne.nicCommand("createlink",B);
            this.ln=this.findElm("A","href",B)
        }
        if(this.ln){
            this.ln.setAttributes({
                href:this.inputs.href.value,
                title:this.inputs.title.value,
                target:this.inputs.target.options[this.inputs.target.selectedIndex].value
            })
        }
    }
});
nicEditors.registerPlugin(nicPlugin,nicLinkOptions);


var nicColorOptions = {
    buttons : {
        'forecolor' : {
            name : __('Change Text Color'),
            type : 'nicEditorColorButton',
            noClose : true
        },
        'bgcolor' : {
            name : __('Change Background Color'),
            type : 'nicEditorBgColorButton',
            noClose : true
        }
    }
};

var nicEditorColorButton=nicEditorAdvancedButton.extend({
    addPane:function(){
        var D={
            0:"00",
            1:"33",
            2:"66",
            3:"99",
            4:"CC",
            5:"FF"
        };

        var H=new bkElement("DIV").setStyle({
            width:"270px"
        });
        for(var A in D){
            for(var F in D){
                for(var E in D){
                    var I="#"+D[A]+D[E]+D[F];
                    var C=new bkElement("DIV").setStyle({
                        cursor:"pointer",
                        height:"15px",
                        "float":"left"
                    }).appendTo(H);
                    var G=new bkElement("DIV").setStyle({
                        border:"2px solid "+I
                    }).appendTo(C);
                    var B=new bkElement("DIV").setStyle({
                        backgroundColor:I,
                        overflow:"hidden",
                        width:"11px",
                        height:"11px"
                    }).addEvent("click",this.colorSelect.closure(this,I)).addEvent("mouseover",this.on.closure(this,G)).addEvent("mouseout",this.off.closure(this,G,I)).appendTo(G);
                    if(!window.opera){
                        C.onmousedown=B.onmousedown=bkLib.cancelEvent
                    }
                }
            }
        }
        this.pane.append(H.noSelect())
    },
    colorSelect:function(A){
        this.ne.nicCommand("foreColor",A);
        this.removePane()
    },
    on:function(A){
        A.setStyle({
            border:"2px solid #000"
        })
    },
    off:function(A,B){
        A.setStyle({
            border:"2px solid "+B
        })
    }
});
var nicEditorBgColorButton=nicEditorColorButton.extend({
    colorSelect:function(A){
        this.ne.nicCommand("hiliteColor",A);
        this.removePane()
    }
});
nicEditors.registerPlugin(nicPlugin,nicColorOptions);


var nicImageOptions = {
    buttons : {
        'image' : {
            name : 'Add Image',
            type : 'nicImageButton',
            tags : ['IMG']
        }
    }
	
};

var nicImageButton=nicEditorAdvancedButton.extend({
    addPane:function(){
        this.im=this.ne.selectedInstance.selElm().parentTag("IMG");
        this.addForm({
            "":{
                type:"title",
                txt:"Add/Edit Image"
            },
            src:{
                type:"text",
                txt:"URL",
                value:"http://",
                style:{
                    width:"150px"
                }
            },
            alt:{
                type:"text",
                txt:"Alt Text",
                style:{
                    width:"100px"
                }
            },
            align:{
                type:"select",
                txt:"Align",
                options:{
                    none:"Default",
                    left:"Left",
                    right:"Right"
                }
            }
        },this.im)
    },
    submit:function(B){
        var C=this.inputs.src.value;
        if(C==""||C=="http://"){
            alert("You must enter a Image URL to insert");
            return false
        }
        this.removePane();
        if(!this.im){
            var A="javascript:nicImTemp();";
            this.ne.nicCommand("insertImage",A);
            this.im=this.findElm("IMG","src",A)
        }
        if(this.im){
            this.im.setAttributes({
                src:this.inputs.src.value,
                alt:this.inputs.alt.value,
                align:this.inputs.align.value
            })
        }
    }
});
nicEditors.registerPlugin(nicPlugin,nicImageOptions);


var nicSaveOptions = {
    buttons : {
        'save' : {
            name : __('Save this content'),
            type : 'nicEditorSaveButton'
        }
    }
};

var nicEditorSaveButton=nicEditorButton.extend({
    init:function(){
        if(!this.ne.options.onSave){
            this.margin.setStyle({
                display:"none"
            })
        }
    },
    mouseClick:function(){
        var B=this.ne.options.onSave;
        var A=this.ne.selectedInstance;
        B(A.getContent(),A.elm.id,A)
    }
});
nicEditors.registerPlugin(nicPlugin,nicSaveOptions);


var nicUploadOptions = {
    buttons : {
        'upload' : {
            name : 'Upload Image',
            type : 'nicUploadButton'
        }
    }
	
};

var nicUploadButton=nicEditorAdvancedButton.extend({
    nicURI:"http://files.nicedit.com/",
    addPane:function(){
        this.im=this.ne.selectedInstance.selElm().parentTag("IMG");
        this.myID=Math.round(Math.random()*Math.pow(10,15));
        this.requestInterval=1000;
        this.uri=this.ne.options.uploadURI||this.nicURI;
        nicUploadButton.lastPlugin=this;
        this.myFrame=new bkElement("iframe").setAttributes({
            width:"100%",
            height:"100px",
            frameBorder:0,
            scrolling:"no"
        }).setStyle({
            border:0
        }).appendTo(this.pane.pane);
        this.progressWrapper=new bkElement("div").setStyle({
            display:"none",
            width:"100%",
            height:"20px",
            border:"1px solid #ccc"
        }).appendTo(this.pane.pane);
        this.progress=new bkElement("div").setStyle({
            width:"0%",
            height:"20px",
            backgroundColor:"#ccc"
        }).setContent("&nbsp").appendTo(this.progressWrapper);
        setTimeout(this.addForm.closure(this),50)
    },
    addForm:function(){
        var A=this.myDoc=this.myFrame.contentWindow.document;
        A.open();
        A.write("<html><body>");
        A.write('<form method="post" action="'+this.uri+"?id="+this.myID+'" enctype="multipart/form-data">');
        A.write('<input type="hidden" name="APC_UPLOAD_PROGRESS" value="'+this.myID+'" />');
        if(this.uri==this.nicURI){
            A.write('<div style="position: absolute; margin-left: 160px;"><img src="http://imageshack.us/img/imageshack.png" width="30" style="float: left;" /><div style="float: left; margin-left: 5px; font-size: 10px;">Hosted by<br /><a href="http://www.imageshack.us/" target="_blank">ImageShack</a></div></div>')
        }
        A.write('<div style="font-size: 14px; font-weight: bold; padding-top: 5px;">Insert an Image</div>');
        A.write('<input name="nicImage" type="file" style="margin-top: 10px;" />');
        A.write("</form>");
        A.write("</body></html>");
        A.close();
        this.myBody=A.body;
        this.myForm=$BK(this.myBody.getElementsByTagName("form")[0]);
        this.myInput=$BK(this.myBody.getElementsByTagName("input")[1]).addEvent("change",this.startUpload.closure(this));
        this.myStatus=new bkElement("div",this.myDoc).setStyle({
            textAlign:"center",
            fontSize:"14px"
        }).appendTo(this.myBody)
    },
    startUpload:function(){
        this.myForm.setStyle({
            display:"none"
        });
        this.myStatus.setContent('<img src="http://files.nicedit.com/ajax-loader.gif" style="float: right; margin-right: 40px;" /><strong>Uploading...</strong><br />Please wait');
        this.myForm.submit();
        setTimeout(this.makeRequest.closure(this),this.requestInterval)
    },
    makeRequest:function(){
        if(this.pane&&this.pane.pane){
            nicUploadButton.lastPlugin=this;
            var A=new bkElement("script").setAttributes({
                type:"text/javascript",
                src:this.uri+"?check="+this.myID+"&rand="+Math.round(Math.random()*Math.pow(10,15))
            }).addEvent("load",function(){
                A.parentNode.removeChild(A)
            }).appendTo(document.getElementsByTagName("head")[0]);
            if(this.requestInterval){
                setTimeout(this.makeRequest.closure(this),this.requestInterval)
            }
        }
    },
    setProgress:function(A){
        this.progressWrapper.setStyle({
            display:"block"
        });
        this.progress.setStyle({
            width:A+"%"
        })
    },
    update:function(C){
        if(C==false){
            this.progressWrapper.setStyle({
                display:"none"
            })
        }else{
            if(C.url){
                this.setProgress(100);
                this.requestInterval=false;
                if(!this.im){
                    this.ne.selectedInstance.restoreRng();
                    var B="javascript:nicImTemp();";
                    this.ne.nicCommand("insertImage",B);
                    this.im=this.findElm("IMG","src",B)
                }
                var A=parseInt(this.ne.selectedInstance.elm.getStyle("width"));
                if(this.im){
                    this.im.setAttributes({
                        src:C.url,
                        width:(A&&C.width)?Math.min(A,C.width):""
                    })
                }
                this.removePane()
            }else{
                if(C.error){
                    this.requestInterval=false;
                    this.setProgress(100);
                    alert("There was an error uploading your image ("+C.error+").");
                    this.removePane()
                }else{
                    if(C.noprogress){
                        this.progressWrapper.setStyle({
                            display:"none"
                        });
                        if(this.uri.indexOf("http:")==-1||this.uri.indexOf(window.location.host)!=-1){
                            this.requestInterval=false
                        }
                    }else{
                        this.setProgress(Math.round((C.current/C.total)*75));
                        if(C.interval){
                            this.requestInterval=C.interval
                        }
                    }
                }
            }
        }
    }
});
nicUploadButton.statusCb=function(A){
    nicUploadButton.lastPlugin.update(A)
};

nicEditors.registerPlugin(nicPlugin,nicUploadOptions);

var nicXHTML=bkClass.extend({
    stripAttributes:["_moz_dirty","_moz_resizing","_extended"],
    noShort:["style","title","script","textarea","a"],
    cssReplace:{
        "font-weight:bold;":"strong",
        "font-style:italic;":"em"
    },
    sizes:{
        1:"xx-small",
        2:"x-small",
        3:"small",
        4:"medium",
        5:"large",
        6:"x-large"
    },
    construct:function(A){
        this.ne=A;
        if(this.ne.options.xhtml){
            A.addEvent("get",this.cleanup.closure(this))
        }
    },
    cleanup:function(A){
        var B=A.getElm();
        var C=this.toXHTML(B);
        A.content=C
    },
    toXHTML:function(C,A,L){
        var G="";
        var O="";
        var P="";
        var I=C.nodeType;
        var Q=C.nodeName.toLowerCase();
        var N=C.hasChildNodes&&C.hasChildNodes();
        var B=new Array();
        switch(I){
            case 1:
                var H=C.attributes;
                switch(Q){
                    case"b":
                        Q="strong";
                        break;
                    case"i":
                        Q="em";
                        break;
                    case"font":
                        Q="span";
                        break
                }
                if(A){
                    for(var F=0;F<H.length;F++){
                        var K=H[F];
                        var M=K.nodeName.toLowerCase();
                        var D=K.nodeValue;
                        if(!K.specified||!D||bkLib.inArray(this.stripAttributes,M)||typeof (D)=="function"){
                            continue
                        }
                        switch(M){
                            case"style":
                                var J=D.replace(/ /g,"");
                                for(itm in this.cssReplace){
                                    if(J.indexOf(itm)!=-1){
                                        B.push(this.cssReplace[itm]);
                                        J=J.replace(itm,"")
                                    }
                                }
                                P+=J;
                                D="";
                                break;
                            case"class":
                                D=D.replace("Apple-style-span","");
                                break;
                            case"size":
                                P+="font-size:"+this.sizes[D]+";";
                                D="";
                                break
                        }
                        if(D){
                            O+=" "+M+'="'+D+'"'
                        }
                    }
                    if(P){
                        O+=' style="'+P+'"'
                    }
                    for(var F=0;F<B.length;F++){
                        G+="<"+B[F]+">"
                    }
                    if(O==""&&Q=="span"){
                        A=false
                    }
                    if(A){
                        G+="<"+Q;
                        if(Q!="br"){
                            G+=O
                        }
                    }
                }
                if(!N&&!bkLib.inArray(this.noShort,M)){
                    if(A){
                        G+=" />"
                    }
                }else{
                    if(A){
                        G+=">"
                    }
                    for(var F=0;F<C.childNodes.length;F++){
                        var E=this.toXHTML(C.childNodes[F],true,true);
                        if(E){
                            G+=E
                        }
                    }
                }
                if(A&&N){
                    G+="</"+Q+">"
                }
                for(var F=0;F<B.length;F++){
                    G+="</"+B[F]+">"
                }
                break;
            case 3:
                G+=C.nodeValue;
                break
        }
        return G
    }
});
nicEditors.registerPlugin(nicXHTML);

var nicBBCode=bkClass.extend({
    construct:function(A){
        this.ne=A;
        if(this.ne.options.bbCode){
            A.addEvent("get",this.bbGet.closure(this));
            A.addEvent("set",this.bbSet.closure(this));
            var B=this.ne.loadedPlugins;
            for(itm in B){
                if(B[itm].toXHTML){
                    this.xhtml=B[itm]
                }
            }
        }
    },
    bbGet:function(A){
        var B=this.xhtml.toXHTML(A.getElm());
        A.content=this.toBBCode(B)
    },
    bbSet:function(A){
        A.content=this.fromBBCode(A.content)
    },
    toBBCode:function(B){
        function A(D,C){
            B=B.replace(D,C)
        }
        A(/\n/gi,"");
        A(/<strong>(.*?)<\/strong>/gi,"[b]$1[/b]");
        A(/<em>(.*?)<\/em>/gi,"[i]$1[/i]");
        A(/<span.*?style="text-decoration:underline;">(.*?)<\/span>/gi,"[u]$1[/u]");
        A(/<ul>(.*?)<\/ul>/gi,"[list]$1[/list]");
        A(/<li>(.*?)<\/li>/gi,"[*]$1[]");
        A(/<ol>(.*?)<\/ol>/gi,"[list=1]$1[/list]");
        A(/<img.*?src="(.*?)".*?>/gi,"[img]$1[/img]");
        A(/<a.*?href="(.*?)".*?>(.*?)<\/a>/gi,"[url=$1]$2[/url]");
        A(/<br.*?>/gi,"\n");
        A(/<.*?>.*?<\/.*?>/gi,"");
        return B
    },
    fromBBCode:function(A){
        function B(D,C){
            A=A.replace(D,C)
        }
        B(/\[b\](.*?)\[\/b\]/gi,"<strong>$1</strong>");
        B(/\[i\](.*?)\[\/i\]/gi,"<em>$1</em>");
        B(/\[u\](.*?)\[\/u\]/gi,'<span style="text-decoration:underline;">$1</span>');
        B(/\[list\](.*?)\[\/list\]/gi,"<ul>$1</ul>");
        B(/\[list=1\](.*?)\[\/list\]/gi,"<ol>$1</ol>");
        B(/\[\*\](.*?)\[\/\*\]/gi,"<li>$1</li>");
        B(/\[img\](.*?)\[\/img\]/gi,'<img src="$1" />');
        B(/\[url=(.*?)\](.*?)\[\/url\]/gi,'<a href="$1">$2</a>');
        B(/\n/gi,"<br />");
        return A
    }
});
nicEditors.registerPlugin(nicBBCode);

nicEditor=nicEditor.extend({
    floatingPanel:function(){
        this.floating=new bkElement("DIV").setStyle({
            position:"absolute",
            top:"-1000px"
        }).appendTo(document.body);
        this.addEvent("focus",this.reposition.closure(this)).addEvent("blur",this.hide.closure(this));
        this.setPanel(this.floating)
    },
    reposition:function(){
        var B=this.selectedInstance.e;
        this.floating.setStyle({
            width:(parseInt(B.getStyle("width"))||B.clientWidth)+"px"
        });
        var A=B.offsetTop-this.floating.offsetHeight;
        if(A<0){
            A=B.offsetTop+B.offsetHeight
        }
        this.floating.setStyle({
            top:A+"px",
            left:B.offsetLeft+"px",
            display:"block"
        })
    },
    hide:function(){
        this.floating.setStyle({
            top:"-1000px"
        })
    }
});


var nicCodeOptions = {
    buttons : {
        'xhtml' : {
            name : 'Edit HTML',
            type : 'nicCodeButton'
        }
    }
	
};

var nicCodeButton=nicEditorAdvancedButton.extend({
    width:"350px",
    addPane:function(){
        this.addForm({
            "":{
                type:"title",
                txt:"Edit HTML"
            },
            code:{
                type:"content",
                value:this.ne.selectedInstance.getContent(),
                style:{
                    width:"340px",
                    height:"200px"
                }
            }
        })
    },
    submit:function(B){
        var A=this.inputs.code.value;
        this.ne.selectedInstance.setContent(A);
        this.removePane()
    }
});
nicEditors.registerPlugin(nicPlugin,nicCodeOptions);

